package com.example.leetcode.trainingcamp.week3.expand;

import java.util.LinkedList;

/**
 * 动物收容所。有家动物收容所只收容狗与猫，且严格遵守“先进先出”的原则。在收养该收容所的动物时，收养人只能收养所有动物中“最老”（由其进入收容所的时间长短而定）的动物，或者可以挑选猫或狗（同时必须收养此类动物中“最老”的）。换言之，收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构，实现各种操作方法，比如enqueue、dequeueAny、dequeueDog和dequeueCat。允许使用Java内置的LinkedList数据结构。
 *
 * <p>enqueue方法有一个animal参数，animal[0]代表动物编号，animal[1]代表动物种类，其中 0 代表猫，1 代表狗。
 *
 * <p>dequeue*方法返回一个列表[动物编号, 动物种类]，若没有可以收养的动物，则返回[-1,-1]。
 *
 * <p>来源：力扣（LeetCode） 链接：https://leetcode-cn.com/problems/animal-shelter-lcci
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class AnimalShelf {

    private final LinkedList<int[]> dog;
    private final LinkedList<int[]> cat;

    public AnimalShelf() {

        dog = new LinkedList<>();
        cat = new LinkedList<>();
    }

    public void enqueue(int[] animal) {
        if (animal[1] == 0){
            cat.add(animal);
        }else {
            dog.add(animal);
        }
    }

    public int[] dequeueAny() {
        if (dog.size() ==0 && cat.size() == 0){
            return new int[]{-1,-1};
         }
        if (dog.size() == 0){
            return cat.removeFirst();
        }
        if (cat.size() == 0){
            return dog.removeFirst();
        }
        int[] first = dog.getFirst();
        int[] first1 = cat.getFirst();
        if (first[0]>first1[0]){
            return cat.removeFirst();
        }else {
            return dog.removeFirst();
        }
    }

    public int[] dequeueDog() {
        if (dog.size()!= 0){
            return dog.removeFirst();
        }
        return  new int[]{-1,-1};
    }

    public int[] dequeueCat() {
        if (cat.size()!= 0){
            return cat.removeFirst();
        }
        return  new int[]{-1,-1};
    }

}

class TestAnimal{
  public static void main(String[] args) {
    AnimalShelf shelf = new AnimalShelf();
    shelf.enqueue(new int[]{0,0});
    shelf.enqueue(new int[]{1,1});
    shelf.enqueue(new int[]{2,0});
    int[] ints = shelf.dequeueAny();
    System.out.println(ints[0]+","+ints[1]);
    int[] ints1 = shelf.dequeueAny();
    System.out.println(ints1[0]+","+ints1[1]);
  }
}